package com.ruoyi.system.service.impl;

import java.util.Date;
import java.util.List;
import com.ruoyi.common.enums.VideoParseResponse;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.VideoParseLog;
import com.ruoyi.system.mapper.VideoParseLogMapper;
import com.ruoyi.system.service.IVideoParseLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 短视频解析日志Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-01-15
 */
@Service
public class VideoParseLogServiceImpl implements IVideoParseLogService 
{
    @Autowired
    private VideoParseLogMapper videoParseLogMapper;

    /**
     * 查询短视频解析日志
     * 
     * @param logId 短视频解析日志主键
     * @return 短视频解析日志
     */
    @Override
    public VideoParseLog selectVideoParseLogByLogId(Long logId)
    {
        return videoParseLogMapper.selectVideoParseLogByLogId(logId);
    }

    /**
     * 查询短视频解析日志列表
     * 
     * @param videoParseLog 短视频解析日志
     * @return 短视频解析日志
     */
    @Override
    public List<VideoParseLog> selectVideoParseLogList(VideoParseLog videoParseLog)
    {
        return videoParseLogMapper.selectVideoParseLogList(videoParseLog);
    }

    /**
     * 新增短视频解析日志
     * 
     * @param videoParseLog 短视频解析日志
     * @return 结果
     */
    @Override
    public int insertVideoParseLog(VideoParseLog videoParseLog)
    {
        return videoParseLogMapper.insertVideoParseLog(videoParseLog);
    }

    /**
     * 修改短视频解析日志
     * 
     * @param videoParseLog 短视频解析日志
     * @return 结果
     */
    @Override
    public int updateVideoParseLog(VideoParseLog videoParseLog)
    {
        return videoParseLogMapper.updateVideoParseLog(videoParseLog);
    }

    /**
     * 批量删除短视频解析日志
     * 
     * @param logIds 需要删除的短视频解析日志主键
     * @return 结果
     */
    @Override
    public int deleteVideoParseLogByLogIds(Long[] logIds)
    {
        return videoParseLogMapper.deleteVideoParseLogByLogIds(logIds);
    }

    /**
     * 删除短视频解析日志信息
     * 
     * @param logId 短视频解析日志主键
     * @return 结果
     */
    @Override
    public int deleteVideoParseLogByLogId(Long logId)
    {
        return videoParseLogMapper.deleteVideoParseLogByLogId(logId);
    }

    /**
     * 根据小程序ID统计解析次数
     * 
     * @param miniprogramId 小程序ID
     * @return 解析次数
     */
    @Override
    public Long countByMiniprogramId(String miniprogramId)
    {
        return videoParseLogMapper.countByMiniprogramId(miniprogramId);
    }

    /**
     * 根据平台统计解析次数
     * 
     * @param platform 平台名称
     * @return 解析次数
     */
    @Override
    public Long countByPlatform(String platform)
    {
        return videoParseLogMapper.countByPlatform(platform);
    }

    /**
     * 清空短视频解析日志
     * 
     * @return 结果
     */
    @Override
    public int cleanVideoParseLog()
    {
        return videoParseLogMapper.cleanVideoParseLog();
    }

    /**
     * 记录短视频解析日志
     * 
     * @param miniprogramId 小程序ID
     * @param userId 用户ID
     * @param userIp 用户IP
     * @param platform 平台
     * @param originalUrl 原始链接
     * @param parsedUrl 解析后链接
     * @param videoData 视频数据
     * @param parseStatus 解析状态
     * @param errorMessage 错误信息
     * @param parseTime 解析耗时
     * @param userAgent 用户代理
     * @return 结果
     */
    @Override
    public int recordVideoParseLog(String miniprogramId, String userId, String userIp, 
                                 String platform, String originalUrl, String parsedUrl,
                                 Object videoData, Integer parseStatus, String errorMessage,
                                 Long parseTime, String userAgent)
    {
        VideoParseLog log = new VideoParseLog();
        log.setMiniprogramId(miniprogramId);
        log.setUserId(userId);
        log.setUserIp(userIp);
        log.setPlatform(platform);
        log.setOriginalUrl(originalUrl);
        log.setParsedUrl(parsedUrl);
        log.setParseStatus(parseStatus);
        log.setErrorMessage(errorMessage);
        log.setParseTime(parseTime);
        log.setParseDate(new Date());
        log.setUserAgent(userAgent);
        
        // 如果解析成功且有视频数据，提取视频信息
        if (parseStatus == 0 && videoData instanceof VideoParseResponse.VideoData) {
            VideoParseResponse.VideoData data = (VideoParseResponse.VideoData) videoData;
            log.setVideoTitle(data.getTitle());
            log.setVideoAuthor(data.getAuthor());
            log.setVideoAuthorId(data.getUid());
            log.setVideoCover(data.getCover());
            
            // 如果有视频URL，设置解析后的链接
            if (StringUtils.isNotEmpty(data.getUrl())) {
                log.setParsedUrl(data.getUrl());
            }
        }
        
        return insertVideoParseLog(log);
    }
}
